//电流互感器
//50Hz ~ 60Hz使用状态的参数
//  变比2000:1
//  输入额定电流 5A : 适用于 引针输出方式
//  输出额定电流 2.5mA : 适用于 穿心输入方式
//      如果穿心输入是交流, 输出的是 交流信号
//  负载电阻 100Ω


//用万用表测量的数据
//空负载 或者 负载停止运行 AC 7.8mV ~ 7.9mV
//单独风扇转速最慢 万用表AC挡位显示 49.5mV
//单独点火棒 AC 700mV
//单独马达风扇 232mV
//单独螺杆马达 ?

//用示波器测量的数据
//风扇 +-400mV AC
//点火棒 +900mV AC

//无法通用, 依赖负载的电压区分, 无法保证每个负载都有相同的参数, 可能会导致量产后出现误报的情况
//哪怕是通过 过零准确的定位到负载不同的电压, 一样无法确定量产后负载的参数都是一样, 总有会有的负载超过判断条件导致误报
//该方案是否 需要继续？


//针对 AC信号 需要在固定位置读取AD值

// 经过3脚的信号是AC,会过0点, 导致MCU采样的值会正弦波形波动且经过0v, 为了定位不同负载, 需要通过过零后在固定的位置采样, 采集波形最大AC值
// 缺陷: 必须搭配过零检测, 否则 只有三路负载都出错互感器才会输出0, 报负载异常; 主要原因是AD采样起点位置是随机,采样周期是固定, 甚至有可能正弦波有位置偏移导致采样起点位置偏移 ; 互感器不太适合多路检测      
//     解决方法: 低于10ms采样(50Hz); 低于8ms采样(60Hz)

//解决方法: 
//开机的时候检测负载: 开机后 间隔10min检测
//  检测顺序(上电开机): 点火棒, 螺杆, 风扇; 每个单独检测
//      间隔10min后(在PID控制的情况) 怎么检测: 
//      根据检测结果: 区分是否能够执行控温算法

//110v AC: 风扇, 马达: +-400mV; 点火棒: +1000mV, -500mV
//220v AC: 风扇, 马达: +-

#include "ZHT104C.h"
#include "APP_Main.h"
#include "apt32f102_syscon.h"
#include "apt32f102_bt.h"


float Load_mV = 0;
uint8_t ZHT104C_Step = 0; //>0: 负载检测中...; ==0:负载检测结束
uint8_t ZHT104C_Result = 0; //0: 


#define Read_Auger_Output() (GPIO_Read_Output(GPIOA0,IO_Feed) == 0)?0:1
#define Read_Igniter_Output() (GPIO_Read_Output(GPIOA0,IO_Heater) == 0)?0:1
#define Read_Fan_Output() (GPIO_Read_Output(GPIOA0,IO_Fan) == 0)?0:1


void ZHT104C_Start()
{
    ZHT104C_Step = 1;
    ZHT104C_Result = 0;
}
void ZHT104C_Init()
{
}
void ZHT104C_Main()
{
}
    static uint16_t count_H = 0; 
    static uint16_t count_L = 0; 
//Tick 10ms
void ZHT104C_Clock()
{
    static uint16_t count = 0; 
    float Load_AD = 0; 
     
    if(UI_System.ICO_Error == UI_OFF)
    { //间隔 10min 重新检测负载
        count++;
        if(count >= (100 * 60 * 10))
        {
            count = 0;

            ZHT104C_Step = 1;
        }
    }
    else count = 0;

    if(ZHT104C_Step == 0)
    {
        count_L = 0;
        count_H = 0;
        Fan_Disable = 0;
    }
    else
    {
        if(AD_1v > 0)
        {
            Load_AD = SamplingSingle(ADC_Load);
            Load_mV = AD_1v * Load_AD;
        }

        if(ZHT104C_Step == 1)
        { //检测点火棒
            IgniterOpen;
            HeaterFanClose;
            ExhaustFanClose;
            Fan_Disable = 1;

            if(Load_mV <= 100) 
            {
                if(count_L < 0xffff) count_L++;
                if(count_L >= (100 * 5))
                {
                    count_L = 0;
                    count_H = 0;

                    UI_System.ICO_Error = UI_ON;
                    UI_System.ICO_Error_Ignite = UI_ON;
                    Temp_Param.oven_Err = Pt_Elr;
                    ZHT104C_Step = 2;
                }
            }
            else
            {
                count_L = 0; 
                if(count_H < 0xffff) count_H++;
                if(count_H >= (100 * 5))
                {
                    count_L = 0;
                    count_H = 0;

                    ZHT104C_Step = 2;
                }
            }
        }
        else if(ZHT104C_Step == 2)
        { //检测螺杆马达
            IgniterClose;
            HeaterFanOpen;
            ExhaustFanClose;
            Fan_Disable = 1;

            if(Load_mV <= 50) 
            {
                if(count_L < 0xffff) count_L++;
                if(count_L >= (100 * 10))
                {
                    count_L = 0;
                    count_H = 0;

                    UI_System.ICO_Error = UI_ON;
                    UI_System.ICO_Error_Auger = UI_ON;
                    Temp_Param.oven_Err = Pt_EOr;
                    ZHT104C_Step = 3;
                }
            }
            else
            {
                count_L = 0; 
                if(count_H < 0xffff) count_H++;
                if(count_H >= (100 * 5))
                {
                    count_L = 0;
                    count_H = 0;

                    ZHT104C_Step = 3;
                }
            }
        } 
        else if(ZHT104C_Step == 3)
        { //检测风扇
            IgniterClose;
            HeaterFanClose;
            ExhaustFanOpen;
            Fan_Disable = 1;

            if(Load_mV <= 50) 
            {
                if(count_L < 0xffff) count_L++;
                if(count_L >= (100 * 10))
                {
                    count_L = 0;
                    count_H = 0;

                    UI_System.ICO_Error = UI_ON;
                    UI_System.ICO_Error_Fan = UI_ON;
                    Temp_Param.oven_Err = Pt_EFn;
                    ZHT104C_Step = 0;
                }
            }
            else
            {
                count_L = 0; 
                if(count_H < 0xffff) count_H++;
                if(count_H >= (100 * 5))
                {
                    count_L = 0;
                    count_H = 0;

                    ZHT104C_Step = 0;
                }
            }
        }
    } 
}
